home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_xemacs.idb / usr / freeware / lib / xemacs-20.4 / lisp / auctex / tex-info.el.z / tex-info.el
Encoding:
Text File  |  1998-05-21  |  12.7 KB  |  395 lines

  1. ;;; tex-info.el - Support for editing TeXinfo source.
  2. ;;
  3. ;; Maintainer: Per Abrahamsen <auc-tex@sunsite.auc.dk>
  4. ;; Version: 9.7p
  5.  
  6. ;; Copyright (C) 1993, 1994, 1997 Per Abrahamsen 
  7. ;; 
  8. ;; This program is free software; you can redistribute it and/or modify
  9. ;; it under the terms of the GNU General Public License as published by
  10. ;; the Free Software Foundation; either version 2, or (at your option)
  11. ;; any later version.
  12. ;; 
  13. ;; This program is distributed in the hope that it will be useful,
  14. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. ;; GNU General Public License for more details.
  17. ;; 
  18. ;; You should have received a copy of the GNU General Public License
  19. ;; along with this program; if not, write to the Free Software
  20. ;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22. ;;; Code:
  23.  
  24. (require 'tex)
  25. (condition-case nil            ;Lucid is not providing.
  26.     (require 'texinfo)
  27.   (error))
  28.  
  29. ;;; Environments:
  30.  
  31. (defvar TeXinfo-environment-list
  32.   '(("cartouche")
  33.     ("defcv")
  34.     ("deffn") ("defivar") ("defmac")
  35.     ("defmethod") ("defop") ("defopt") ("defspec") ("deftp")
  36.     ("deftypefn") ("deftypefun") ("deftypevar") ("deftypevr")
  37.     ("defun") ("defvar") ("defvr") ("description") ("display")
  38.     ("enumerate") ("example") ("ifset") ("ifclear") ("flushleft")
  39.     ("flushright") ("format") ("ftable") ("iftex") ("itemize")
  40.     ("lisp") ("quotation") ("smallexample") ("smalllisp") ("table")
  41.     ("tex") ("titlepage") ("vtable")) 
  42.   "Alist of TeXinfo environments.")
  43.  
  44. (defconst texinfo-environment-regexp
  45.   ;; Overwrite version from `texinfo.el'.
  46.   (concat "^@\\("
  47.       (mapconcat 'car TeXinfo-environment-list "\\|")
  48.       "\\|end\\)")
  49.   "Regexp for environment-like TeXinfo list commands.
  50. Subexpression 1 is what goes into the corresponding `@end' statement.")
  51.  
  52. (defun TeXinfo-insert-environment (env)
  53.   "Insert TeXinfo environment ENV.
  54. When called interactively, prompt for an environment."
  55.   (interactive (list (completing-read "Environment: "
  56.                       TeXinfo-environment-list)))
  57.   (insert "@" env "\n\n@end " env "\n")
  58.   (if (null (cdr-safe (assoc "defcv" TeXinfo-environment-list)))
  59.       (forward-line -2)
  60.     ;; apply arguments
  61.     ))
  62.  
  63. ;;; Keymap:
  64.  
  65. (defvar TeXinfo-mode-map nil
  66.   "Keymap for TeXinfo mode.")
  67.  
  68. (if TeXinfo-mode-map
  69.     ()
  70.   (setq TeXinfo-mode-map (make-sparse-keymap))
  71.  
  72.   ;; From texinfo.el
  73.  
  74.   ;; bindings for updating nodes and menus
  75.   (define-key TeXinfo-mode-map "\C-c\C-um"      'texinfo-master-menu)
  76.   (define-key TeXinfo-mode-map "\C-c\C-u\C-m"   'texinfo-make-menu)
  77.   (define-key TeXinfo-mode-map "\C-c\C-u\C-n"   'texinfo-update-node)
  78.   (define-key TeXinfo-mode-map "\C-c\C-u\C-e"   'texinfo-every-node-update)
  79.   (define-key TeXinfo-mode-map "\C-c\C-u\C-a"   'texinfo-all-menus-update)
  80.  
  81.   ;; From TeX-mode
  82.  
  83.   ;; Standard
  84.   (define-key TeXinfo-mode-map "\177"     'backward-delete-char-untabify)
  85.   (define-key TeXinfo-mode-map "\C-c}"    'up-list)
  86.   (define-key TeXinfo-mode-map "\C-c#"    'TeX-normal-mode)
  87.   (define-key TeXinfo-mode-map "\C-c\C-n" 'TeX-normal-mode)
  88.   (define-key TeXinfo-mode-map "\C-c?"    'describe-mode)
  89.   
  90.   ;; From tex.el
  91.   (define-key TeXinfo-mode-map "\C-c{"    'TeX-insert-braces)
  92.   (define-key TeXinfo-mode-map "\C-c\C-f" 'TeX-font)
  93.   (define-key TeXinfo-mode-map "\C-c\C-m" 'TeX-insert-macro)
  94.   (define-key TeXinfo-mode-map "\e\t"     'TeX-complete-symbol) 
  95.  
  96.   (define-key TeXinfo-mode-map "\C-c;"    'TeX-comment-region)
  97.   (define-key TeXinfo-mode-map "\C-c%"    'TeX-comment-paragraph)
  98.   (define-key TeXinfo-mode-map "\C-c'"    'TeX-comment-paragraph) ;*** Old way
  99.   (define-key TeXinfo-mode-map "\C-c:"    'TeX-un-comment-region) ;*** Old way
  100.   (define-key TeXinfo-mode-map "\C-c\""   'TeX-un-comment) ;*** Old way
  101.  
  102.   ;; From tex-buf.el
  103.   (define-key TeXinfo-mode-map "\C-c\C-c" 'TeX-command-master)
  104.   (define-key TeXinfo-mode-map "\C-c\C-k" 'TeX-kill-job)
  105.   (define-key TeXinfo-mode-map "\C-c\C-l" 'TeX-recenter-output-buffer)
  106.   (define-key TeXinfo-mode-map "\C-c^" 'TeX-home-buffer)
  107.   (define-key TeXinfo-mode-map "\C-c`"    'TeX-next-error)
  108.   (define-key TeXinfo-mode-map "\C-c\C-w" 'TeX-toggle-debug-boxes)
  109.  
  110.   ;; From tex.cpl.el
  111.  
  112.   ;; Simulating LaTeX-mode
  113.  
  114.   (define-key TeXinfo-mode-map "\C-c\C-e" 'TeXinfo-insert-environment)
  115.   (define-key TeXinfo-mode-map "\C-c\n"   'texinfo-insert-@item)
  116.   (define-key TeXinfo-mode-map "\C-c\C-s" 'texinfo-insert-@node)
  117.   (define-key TeXinfo-mode-map "\C-c]" 'texinfo-insert-@end))
  118.  
  119. (easy-menu-define TeXinfo-mode-menu
  120.     TeXinfo-mode-map
  121.     "Menu used in TeXinfo mode."
  122.   (list "TeXinfo"
  123.     ["Environment..." TeXinfo-insert-environment t]
  124.     ["Node..." texinfo-insert-@node t]
  125.     ["Macro..." TeX-insert-macro t]
  126.     ["Complete" TeX-complete-symbol t]
  127.     ["Item" texinfo-insert-@item t]
  128.     (list "Insert Font"
  129.           ["Emphasize"  (TeX-font nil ?\C-e) :keys "C-c C-f C-e"]
  130.           ["Bold"       (TeX-font nil ?\C-b) :keys "C-c C-f C-b"]
  131.           ["Typewriter" (TeX-font nil ?\C-t) :keys "C-c C-f C-t"]
  132.           ["Small Caps" (TeX-font nil ?\C-c) :keys "C-c C-f C-c"]
  133.           ["Italic"     (TeX-font nil ?\C-i) :keys "C-c C-f C-i"]
  134.           ["Sample"    (TeX-font nil ?\C-s) :keys "C-c C-f C-s"]
  135.           ["Roman"      (TeX-font nil ?\C-r) :keys "C-c C-f C-r"])
  136.     (list "Change Font"
  137.           ["Emphasize"  (TeX-font t ?\C-e) :keys "C-u C-c C-f C-e"]
  138.           ["Bold"       (TeX-font t ?\C-b) :keys "C-u C-c C-f C-b"]
  139.           ["Typewriter" (TeX-font t ?\C-t) :keys "C-u C-c C-f C-t"]
  140.           ["Small Caps" (TeX-font t ?\C-c) :keys "C-u C-c C-f C-c"]
  141.           ["Italic"     (TeX-font t ?\C-i) :keys "C-u C-c C-f C-i"]
  142.           ["Sample"    (TeX-font t ?\C-s) :keys "C-u C-c C-f C-s"]
  143.           ["Roman"      (TeX-font t ?\C-r) :keys "C-u C-c C-f C-r"])
  144.     "-"
  145.     ["Save Document" TeX-save-document t]
  146.     ["Next Error" TeX-next-error t]
  147.     (list "TeX Output"
  148.           ["Kill Job" TeX-kill-job t]
  149.           ["Debug Bad Boxes" TeX-toggle-debug-boxes
  150.             :style toggle :selected TeX-debug-bad-boxes ]
  151.           ["Switch to original file" TeX-home-buffer t]
  152.           ["Recenter Output Buffer" TeX-recenter-output-buffer t])
  153.     "--"
  154.     ["Create Master Menu" texinfo-master-menu t]
  155.     ["Create Menu" texinfo-make-menu t]
  156.     ["Update Node" texinfo-update-node t]
  157.     ["Update Every Node" texinfo-every-node-update t]
  158.     ["Update All Menus" texinfo-all-menus-update t]
  159.     ["Uncomment Region" TeX-un-comment-region t]
  160.     ["Comment Region" TeX-comment-region t]
  161.     ["Switch to Master file" TeX-home-buffer t]
  162.     ["Submit bug report" TeX-submit-bug-report t]
  163.     ["Reset Buffer" TeX-normal-mode t]
  164.     ["Reset AUC TeX" (TeX-normal-mode t) :keys "C-u C-c C-n"]))
  165.  
  166. (easy-menu-define TeXinfo-command-menu
  167.     TeXinfo-mode-map
  168.     "Menu used in TeXinfo mode for external commands."
  169.   (append '("Command")
  170.       (mapcar 'TeX-command-menu-entry TeX-command-list)))
  171.  
  172. (defvar TeXinfo-font-list
  173.   '((?\C-b "@b{" "}")
  174.     (?\C-c "@sc{" "}")
  175.     (?\C-e "@emph{" "}")
  176.     (?\C-i "@i{" "}")
  177.     (?\C-r "@r{" "}")
  178.     (?\C-s "@samp{" "}")
  179.     (?\C-t "@t{" "}")
  180.     (?s    "@strong{" "}")
  181.     (?\C-f "@file{" "}")
  182.     (?\C-d "@dfn{" "}")
  183.     (?\C-v "@var{" "}")
  184.     (?k    "@key{" "}")
  185.     (?\C-k "@kbd{" "}")
  186.     (?c    "@code{" "}")
  187.     (?C    "@cite{" "}"))
  188.   "Font commands used in TeXinfo mode.  See `TeX-font-list'.")
  189.   
  190. ;;; Mode:
  191.  
  192. ;;; Do not ;;;###autoload because of conflict with standard tex-mode.el.
  193. (defun texinfo-mode ()
  194.   "Major mode for editing files of input for TeXinfo.
  195.  
  196. Special commands:
  197. \\{TeXinfo-mode-map}
  198.  
  199. Entering TeXinfo mode calls the value of text-mode-hook,
  200. then the value of TeX-mode-hook, and then the value of
  201. TeXinfo-mode-hook."
  202.   (interactive)
  203.   ;; Mostly stolen from texinfo.el
  204.   (setq mode-name "TeXinfo")
  205.   (setq major-mode 'texinfo-mode)
  206.   (use-local-map TeXinfo-mode-map)
  207.   (set-syntax-table texinfo-mode-syntax-table)
  208.   (make-local-variable 'page-delimiter)
  209.   (setq page-delimiter 
  210.     (concat 
  211.      "^@node [ \t]*[Tt]op\\|^@\\(" 
  212.      texinfo-chapter-level-regexp 
  213.      "\\)"))
  214.   (make-local-variable 'require-final-newline)
  215.   (setq require-final-newline t)
  216.   (make-local-variable 'indent-tabs-mode)
  217.   (setq indent-tabs-mode nil)
  218.   (make-local-variable 'paragraph-separate)
  219.   (setq paragraph-separate
  220.     (concat "\b\\|^@[a-zA-Z]*[ \n]\\|" paragraph-separate))
  221.   (make-local-variable 'paragraph-start)
  222.   (setq paragraph-start
  223.     (concat "\b\\|^@[a-zA-Z]*[ \n]\\|" paragraph-start))
  224.   (make-local-variable 'fill-column)
  225.   (setq fill-column 72)
  226.   (make-local-variable 'comment-start)
  227.   (setq comment-start "@c ")
  228.   (make-local-variable 'comment-start-skip)
  229.   (setq comment-start-skip "@c +\\|@comment +")
  230.   (make-local-variable 'words-include-escapes)
  231.   (setq words-include-escapes t)
  232.   (if (not (boundp 'texinfo-imenu-generic-expression))
  233.       ;; This was introduced in 19.30.
  234.       ()
  235.     (make-local-variable 'imenu-generic-expression)
  236.     (setq imenu-generic-expression texinfo-imenu-generic-expression))
  237.   (make-local-variable 'font-lock-defaults)
  238.   (setq font-lock-defaults '(texinfo-font-lock-keywords t))
  239.   (if (not (boundp 'texinfo-section-list))
  240.       ;; This was included in 19.31.
  241.       ()
  242.     (make-local-variable 'outline-regexp)
  243.     (setq outline-regexp 
  244.       (concat "@\\("
  245.           (mapconcat 'car texinfo-section-list "\\>\\|")
  246.           "\\>\\)"))
  247.     (make-local-variable 'outline-level)
  248.     (setq outline-level 'texinfo-outline-level))
  249.   
  250.   ;; Mostly AUC TeX stuff
  251.   (easy-menu-add TeXinfo-command-menu TeXinfo-mode-map)
  252.   (easy-menu-add TeXinfo-mode-menu TeXinfo-mode-map)
  253.   (make-local-variable 'TeX-command-current)
  254.   (setq TeX-command-current 'TeX-command-master)
  255.  
  256.   (setq TeX-default-extension "texi")
  257.   (make-local-variable 'TeX-esc)
  258.   (setq TeX-esc "@")
  259.  
  260.   (make-local-variable 'TeX-auto-regexp-list)
  261.   (setq TeX-auto-regexp-list 'TeX-auto-empty-regexp-list)
  262.   (make-local-variable 'TeX-auto-update)
  263.   (setq TeX-auto-update t)
  264.  
  265.   (setq TeX-command-default "TeX")
  266.   (setq TeX-header-end "%**end")
  267.   (setq TeX-trailer-start (regexp-quote (concat TeX-esc "bye")))
  268.   
  269.   (make-local-variable 'TeX-complete-list)
  270.   (setq TeX-complete-list
  271.     (list (list "@\\([a-zA-Z]*\\)" 1 'TeX-symbol-list nil)
  272.           (list "" TeX-complete-word)))
  273.  
  274.   (make-local-variable 'TeX-font-list)
  275.   (setq TeX-font-list TeXinfo-font-list)
  276.   
  277.   (TeX-add-symbols
  278.    '("appendix" "Title")
  279.    '("appendixsec" "Title")
  280.    '("appendixsection" "Title")
  281.    '("appendixsubsec" "Title")
  282.    '("appendixsubsubsec" "Title")
  283.    '("asis")
  284.    '("author" "Author")
  285.    '("b" "Text")
  286.    '("bullet")
  287.    '("bye")
  288.    '("c" "Comment")
  289.    '("center" "Line-of-text")
  290.    '("chapheading" "Title")
  291.    '("chapter" "Title")
  292.    '("cindex" "Entry")
  293.    '("cite" "Reference")
  294.    '("clear" "Flag")
  295.    '("code" "Sample-code")
  296.    '("comment" "Comment")
  297.    '("contents")
  298.    '("copyright")
  299.    '("defcodeindex" "Index-name")
  300.    '("defindex" "Index-name")
  301.    '("dfn" "Term")
  302.    '("dmn" "Dimension")
  303.    '("dots")
  304.    '("emph" "Text")
  305.    '("equiv")
  306.    '("error")
  307.    '("evenfooting" TeXinfo-lrc-argument-hook)
  308.    '("evenheading" TeXinfo-lrc-argument-hook)
  309.    '("everyfooting" TeXinfo-lrc-argument-hook)
  310.    '("everyheading" TeXinfo-lrc-argument-hook)
  311.    '("exdent" "Line-of-text")
  312.    '("expansion")
  313.    '("file" "Filename")
  314.    '("finalout")
  315.    '("findex" "Entry")
  316.    '("footnote" "Text-of-footnote")
  317.    '("footnotestyle" "Style")
  318.    '("group")
  319.    '("heading" "Title")
  320.    '("headings" "On-off-single-double")
  321.    '("i" "Text")
  322.    '("ignore")
  323.    '("include" "Filename")
  324.    '("inforef" "Node-name" "Info-file-name")
  325.    '("item")
  326.    '("itemx")
  327.    '("kbd" "Keyboard-characters")
  328.    '("key" "Key-name")
  329.    '("kindex" "Entry")
  330.    '("majorheading"  "Title")
  331.    '("menu")
  332.    '("minus")
  333.    '("need" "N")
  334.    '("node" "Name" "Next" "Previous" "Up")
  335.    '("noindent")
  336.    '("oddfooting" TeXinfo-lrc-argument-hook)
  337.    '("oddheading" TeXinfo-lrc-argument-hook)
  338.    '("page")
  339.    '("paragraphindent" "Indent")
  340.    '("pindex" "Entry")
  341.    '("point")
  342.    '("print")
  343.    '("printindex" "Index-name")
  344.    '("pxref" "Node-name")
  345.    '("r" "Text")
  346.    '("ref" "Node-name")
  347.    '("refill")
  348.    '("result")
  349.    '("samp" "Text")
  350.    '("sc" "Text")
  351.    '("section" "Title")
  352.    '("set" "Flag")
  353.    '("setchapternewpage" "On-off-odd")
  354.    '("setfilename" "Info-file-name")
  355.    '("settitle" "Title")
  356.    '("shortcontents")
  357.    '("smallbook")
  358.    '("sp" "N")
  359.    '("strong" "Text")
  360.    '("subheading" "Title")
  361.    '("subsection" "Title")
  362.    '("subsubheading" "Title")
  363.    '("subsubsection" "Title")
  364.    '("subtitle" "Title")
  365.    '("summarycontents")
  366.    '("syncodeindex" "From-index" "Into-index")
  367.    '("synindex" "From-index" "Into-index")
  368.    '("t" "Text")
  369.    '("TeX")
  370.    '("thischapter")
  371.    '("thischaptername")
  372.    '("thisfile")
  373.    '("thispage")
  374.    '("tindex" "Entry")
  375.    '("title" "Title")
  376.    '("titlefont" "Text")
  377.    '("titlepage")
  378.    '("today")
  379.    '("top" "Title")
  380.    '("unnumbered" "Title")
  381.    '("unnumberedsec" "Title")
  382.    '("unnumberedsubsec" "Title")
  383.    '("unnumberedsubsubsec" "Title")
  384.    '("value" "Flag")
  385.    '("var" "Metasyntactic-variable")
  386.    '("vindex" "Entry")
  387.    '("vskip" "Amount")
  388.    '("w" "Text"))
  389.   
  390.   (run-hooks 'text-mode-hook 'TeXinfo-mode-hook))
  391.   
  392. (provide 'tex-info)
  393.   
  394. ;;; tex-info.el ends here
  395.